stdlib
Standardized modular package exposing language constructs - free of business logic.
Main Goals
- Free of business logic
- Consistent api
- Explicitness
- Lacking in dependencies
- Lacking indirection
- Highly debuggable
- Highly testable
Installation
> npm install @logdna/stdlib
API
array
Common array manipulation functions
toArray
(item: any
): Array
Converts or wraps anything in an array. Set objects will be converted to arrays.
A String will be treated as a CSV and parsed into an array. If an array cannont
be coerced from the input value, it will be wrapped in an a single element array
Arguments:
item
- The element to convert to an array.
returns result
Array: The resulting array for input coercion
Example
const {array} = require('@logdna/stdlib')
array.toArray()
array.toArray(null)
array.toArray(1)
array.toArray('1,2, 4, 3')
iter
Iteration tools for complex and efficient iteration. Inspired by python's itertools
Iterates endlessly over a single array of items. The elements of the array can be of any type.
Arguments:
items
(Array) - An array to iterate over
returns Generator A generator object containing the passed in elements
Example
const {iter} = require('@logdna/stdlib')
const numbers = iter.cycle([1, 2, 3])
numbers.next().value
numbers.next().value
numbers.next().value
numbers.next().value
numbers.next().value
numbers.next().value
json
Common json functions
Safe json parsing function that attempts to json parse a string. If it cannont, undefined will be returned
Arguments
input
(String) - a json string to parse
returns Object A fully parsed javascript object
Example
const {json} = require('@logdna/stdlib')
json.parse('{"valid": "json"}')
json.parse('{"invalid" json')
object
Common object manipulation and intropsection functions
Determines if a specified key is a direct property of an object. This function is safe
to call on objects that do not inherit from Object.prototype, unlike attempting to call .hasOwnProperty
on input objects
Arguments
obj
(Object) - The object to introspectkey
(String) - The name of the property to locate- (optional)
separator
(String) - Delimiter character
returns Boolean - True of the key is defined on the input object.
Example
const {object} = require('@logdna/stdlib')
object.has({a: 1}, 'a')
object.has({}, 'test')
object.has(Object.create(null), 'test')
object.has({}, 'hasOwnProperty')
object.has({one: {two: {three: 3}}}, 'one-two-three', '-')
get
(obj: Object, property: String [, separator: String = '.']): any
Returns the value from an object at a specified object path.
Arguments
obj
(Object) - The object to introspectkey
(String) - The name of the property to local- (optional)
separator
(String) - Delimiter character
returns any
- The value at the specified key. If no value is found, undefined
will be returned.
Example
const {object} = require('@logdna/stdlib')
const obj = {one: {two: {three: 3}}}
const value = object.get(obj, 'one-two-three', '-')
set
(obj: Object, property: String, value: any
[, separator: String = '.' ]): Object
Sets a property at the deepest level. Nested objects will be created if they do
not exist. Returns the modified object. This will not work on complex Types
like arrays or maps. Only POJOs
NOTE
: if you find your self wanting to set the value at a specific index of an array - you probably want an object.
Arguments
obj
(Object) - The object to introspectkey
(String) - The name of the property to localvalue
(any
) - The value to set at the specified path- (optional)
separator
(String) - Delimiter character
Example
const {object} = require('@logdna/stdlib')
const obj = {one: {two: {three: 3}}}
const value = object.set(obj, 'four.five', 6)
Similar to array.filter, removes keys from an input object that do not pass the
test
function
NOTE
: This function returns a null
object - Object.create(null)
which does not
inherit from Object.prototype
Arguments
obj
(Object) - The object to introspecttest
(Function) - The function to be used to reject keys from the input object.
If this function returns a truthy
value, the key will be included in the final output. If falsey
it will be excluded
Example
const {object} = require('@logdna/stdlib')
const obj = {one: { two: three: 3 } }
object.filter({two: 2, three: 3}, (key) => {
return key.match(/ee$/)
})
returns Object An object containing only the keys which passed the test function.
The return object will have a null
prototype.
Recursively typecast string values of enumerable object properties,
using string.typecast()
Arguments
obj
(Object) - The input objectkey
(Number) - The maximum depth to recursively typecast
returns Object A new object with all string properties typecast.
Example
const {object} = require('@logdna/stdlib')
const obj = {foo: '1', bar: 'null', baz: 'three', qux: {foo: '2'}}
const casted = typecast(obj)
const with_depth = typecast(obj, 0)
string
Casts a string value to its camel case variant
Arguments
str
String - The string value to convert
returns String A camelcase version of the input string
Example
const {string} = require('@logdna/stdlib')
string.camelcase('Hello George Washington')
A safe alternative to String.prototype.toLowerCase(). This can be called non string inputs and they
will be converted to string prior to lower casing.
Arguments
str
String - The string value to convert
returns String A lowercased version of the input string
Example
const {string} = require('@logdna/stdlib')
string.lowercase('Hello George Washington')
string.lowercase({})
string.lowercase(null)
string.lowercase(undefined)
A safe alternative to String.prototype.toUpperCase(). This can be called non string inputs and they
will be converted to string prior to upper casing.
Arguments
str
String - The string value to convert
returns String A uppercased version of the input string
Example
const {string} = require('@logdna/stdlib')
string.uppercase('Hello George Washington')
string.uppercase({})
string.uppercase(null)
string.uppercase(undefined)
slugify
(text: String [, separator: String = '-']): String
Converts a string to a url friendly format by replacing spaces and symbols
with a known value and converting to lower case
Arguments
str
String - The string value to convert- (optional)
separator
(String) - Delimiter character
returns String A slugified version of the input string
Example
const {string} = require('@logdna/stdlib')
string.slugify('A fake Sentence')
string.slugify('A fake Sentence', '::')
Best effort to cast a string to its native couter part where possible.
Supported casts are booleans, numbers, null and undefined
Arguments
value
- The value to cast
returns The native representation of the string input. If the value could not be cast,
it will be returned as it was passed.
Example
const {string} = require('@logdna/stdlib')
string.typecast('null')
string.typecast('true')
string.typecast('10.01')
string.typecast({})
typeOf
(element: any
): String
A more accurate version of the javascript built-in function typeof
Arguments
input
- The input object to introspect
returns String A normalized string representation of the input object
Example
const {typeOf} = require('@logdna/stdlib')
typeOf(new Date())
typeOf(/\w+/)
typeOf(() => {})
typeOf(new Set())
A class object whose instances are derived from Function and can be called.
When exteded, a Symbol function defined by Symbol.for('call')
will be executed
with any arguments that were passed
Example
const {Callable} = require('@logdna/stdlib')
const __call__ = Symbol.for('call')
class Hello extends Callable {
constructor(opts) {
this.yell = !!opts.yell
}
[__call__](name) {
const output = `Hello, ${name}`
console.log(this.yell ? `${output.toUpperCase()}!` : output)
}
}
const screamAt = new Hello({yell: true})
screamAt('bill')
Authors
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!